package org.example.rubbish.mapper;

import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.rubbish.entity.ForumPost;

import java.util.List;
import java.util.Map;

@Mapper
public interface ForumMapper {

    // 原有方法...
    List<ForumPost> selectForumPosts(Map<String, Object> params);
    void insertForumPost(ForumPost forumPost);
    void updateForumPost(ForumPost forumPost);
    void updateForumPostStatus(ForumPost forumPost);
    void deleteForumPost(Long id);
    void batchDeleteForumPosts(@Param("ids") List<Long> ids);
    ForumPost selectForumPostById(Long id);
    Long countTotalPosts();
    Long countPostsByStatus(@Param("status") String status);
    Long sumTotalViews();
    Long sumTotalLikes();
    Long sumTotalComments();



    /**
     * 按矩形边界搜索帖子
     */
    List<ForumPost> selectPostsByBounds(Map<String, Object> params);

    /**
     * 统计有位置信息的帖子数量
     */
    Long countPostsWithLocation();

    /**
     * 统计没有位置信息的帖子数量
     */
    Long countPostsWithoutLocation();

    /**
     * 获取省份分布
     */
    @MapKey("name")
    List<Map<String, Object>> getProvinceDistribution();

    /**
     * 获取热门城市
     */
    @MapKey("name")
    List<Map<String, Object>> getTopCities(@Param("limit") int limit);

    /**
     * 获取区域密度分析
     */
    @MapKey("densityLevel")
    List<Map<String, Object>> getRegionDensity();

    /**
     * 获取近期发帖趋势
     */
    @MapKey("date")
    List<Map<String, Object>> getRecentPostTrend(@Param("days") int days);

    /**
     * 省份统计报表
     */
    @MapKey("regionName")
    List<Map<String, Object>> getProvinceStatsReport();

    /**
     * 城市统计报表
     */
    @MapKey("regionName")
    List<Map<String, Object>> getCityStatsReport();

    /**
     * 区县统计报表
     */
    @MapKey("regionName")
    List<Map<String, Object>> getDistrictStatsReport();

    /**
     * 获取热力图数据
     */
    @MapKey("locationKey")
    List<Map<String, Object>> selectForumHeatmapData(Map<String, Object> params);
}